home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
util4
/
forcepns.lha
/
ForcePens
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-02-06
|
3KB
|
117 lines
/*
** ForcePens
**
** Copyright ©1995, 1996 by Daniel Balster
**
*/
#include <exec/exec.h>
#include <dos/dos.h>
#include <utility/hooks.h>
#include <intuition/intuition.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <string.h>
#include <stdlib.h>
/****************************************************/
//#define DEBUG
#ifdef DEBUG
void kprintf(UBYTE *fmt,...);
#define bug kprintf
#define D(X) X
#else
#define D(X)
#endif
#define AllocStruct(X) AllocVec(sizeof(struct X),MEMF_CLEAR|MEMF_PUBLIC)
#define FreeStruct(X) if (X) FreeVec(X)
#define ifnot(expr) if(!(expr))
typedef enum { false=0, true=~(false) } bool;
/****************************************************/
/* OpenWorkBench */
#define VEC -0xd2
#define LIB (struct Library*) IntuitionBase
extern APTR NewVector;
extern APTR OldVector;
extern long __oslibversion = 37L;
static char vers[] = "$VER: ForcePens 1.1 (29.1.96) ©1996 Daniel Balster";
/* bad style, but works */
#define TEMPL "PEN1/N/A,R1/N/A,G1/N/A,B1/N/A,PEN2/N/A,R2/N/A,G2/N/A,B2/N/A,PEN3/N/A,R3/N/A,G3/N/A,B3/N/A,PEN4/N/A,R4/N/A,G4/N/A,B4/N/A,BORDERMAGIC/N,QUIET/S"
struct {
ULONG *pen1,*r1,*g1,*b1;
ULONG *pen2,*r2,*g2,*b2;
ULONG *pen3,*r3,*g3,*b3;
ULONG *pen4,*r4,*g4,*b4;
ULONG *bordermagic;
ULONG quiet;
} args = {0};
VOID __asm newfunc (register __a0 struct Screen *scr)
{
struct ViewPort *vp = &(scr->ViewPort);
struct ColorMap *cm = vp->ColorMap;
if (args.bordermagic) scr->WBorBottom = *args.bordermagic;
if ( *args.pen1 == ObtainPen (cm, *args.pen1, *args.r1, *args.g1, *args.b1, PEN_EXCLUSIVE) )
if ( *args.pen2 == ObtainPen (cm, *args.pen2, *args.r2, *args.g2, *args.b2, PEN_EXCLUSIVE) )
if ( *args.pen3 == ObtainPen (cm, *args.pen3, *args.r3, *args.g3, *args.b3, PEN_EXCLUSIVE) )
if ( *args.pen4 == ObtainPen (cm, *args.pen4, *args.r4, *args.g4, *args.b4, PEN_EXCLUSIVE) )
{
SetRGB32 (vp, *args.pen1, (*args.r1<<24)|0xffffff, (*args.g1<<24)|0xffffff, (*args.b1<<24)|0xffffff);
SetRGB32 (vp, *args.pen2, (*args.r2<<24)|0xffffff, (*args.g2<<24)|0xffffff, (*args.b2<<24)|0xffffff);
SetRGB32 (vp, *args.pen3, (*args.r3<<24)|0xffffff, (*args.g3<<24)|0xffffff, (*args.b3<<24)|0xffffff);
SetRGB32 (vp, *args.pen4, (*args.r4<<24)|0xffffff, (*args.g4<<24)|0xffffff, (*args.b4<<24)|0xffffff);
}
}
int main ()
{
struct RDArgs *rda;
if (rda = ReadArgs(TEMPL,(LONG*)&args,NULL))
{
if (!args.quiet) PutStr(
"*** ForcePens 1.1 ***\n"
"Copyright © 1996 by Daniel Balster\n"
"All Rights Reserved.\n");
Disable();
OldVector = SetFunction (LIB,VEC,(ULONG(*)())&(NewVector));
CacheClearU();
Enable();
Wait (SIGBREAKF_CTRL_C);
if (FindPort("SetMan"))
{
Disable();
SetFunction (LIB,VEC,(ULONG(*)())(OldVector));
CacheClearU();
Enable();
}
else Wait(0);
FreeArgs(rda);
}
else PrintFault(IoErr(),0);
return 0;
}